package br.com.foxinline.manager.criar;

import br.com.foxinline.enums.Status;
import br.com.foxinline.enums.TipoDocumento;
import br.com.foxinline.modelo.Requerimento;
import br.com.foxinline.modelo.TramiteRequerimento;
import br.com.foxinline.modelo.Usuario;
import br.com.foxinline.servico.PrefeituraServico;
import br.com.foxinline.servico.RequerimentoServico;
import br.com.foxinline.servico.TramiteRequerimentoServico;
import br.com.foxinline.servico.UsuarioServico;
import br.com.foxinline.util.Caracter;
import br.com.foxinline.util.Msg;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import org.primefaces.context.RequestContext;

/**
 *
 * @author elyjunior
 */
@ManagedBean
@ViewScoped
public class ManagerCriarRequerimento {

    @EJB
    RequerimentoServico requerimentoServico;
    @EJB
    TramiteRequerimentoServico tramiteRequerimentoServico;
    @EJB
    UsuarioServico usuarioServico;
    @EJB
    PrefeituraServico prefeituraServico;
    private Requerimento requerimento;
    private boolean docPendentes;
    private TramiteRequerimento tramite;
    private List<TramiteRequerimento> tramites;
    private Usuario usuario;

    @PostConstruct
    public void init() {
        requerimento = new Requerimento();
        requerimento.setTipoDocumentoInteressado(TipoDocumento.CPF);
        requerimento.setTipoDocumentoProprietario(TipoDocumento.CPF);
        tramite = new TramiteRequerimento();
        tramites = new ArrayList<TramiteRequerimento>();
        usuario = usuarioServico.getCurrentUser();

    }

    public void status(Requerimento req) {

        if (docPendentes == true) {
            requerimento.setStatus(Status.DOCPENDENTE);
        } else {
            requerimento.setStatus(Status.PROTOCOLO);
        }
    }

    public TramiteRequerimento getTramiteRequerimento() {
        TramiteRequerimento t = new TramiteRequerimento();
        t.setDataTramite(new Date());
        t.setStatus(requerimento.getStatus());
        t.setUsuario(usuario);
        return t;
    }

    public void salvar() {
        try {

            requerimento.setCpfInteressado(Caracter.removecaracter(requerimento.getCpfInteressado()));
            requerimento.setCnpjInteressado(Caracter.removecaracter(requerimento.getCnpjInteressado()));
            requerimento.setCpfProprietario(Caracter.removecaracter(requerimento.getCpfProprietario()));
            requerimento.setCnpjProprietario(Caracter.removecaracter(requerimento.getCnpjProprietario()));
            requerimento.setAtivo(true);

            status(requerimento);
            tramite = getTramiteRequerimento();
            tramites.add(tramite);

            for (TramiteRequerimento t : tramites) {
                tramiteRequerimentoServico.save(t);
            }

            requerimento.setTramites(tramites);

            requerimentoServico.save(requerimento);
            Msg.messagemInfo(Msg.SuccessFull);
            RequestContext.getCurrentInstance().execute("printDialog.show();");

        } catch (Exception e) {
            System.err.println(e);
        }
    }

    public void imprimirRequerimento() {
        HashMap parametros = new HashMap();

        parametros.putAll(prefeituraServico.parametroPrefeitura());

        requerimentoServico.imprimirRequerimento(requerimento, parametros);
    }

    public void redirect() {
        Msg.messagemInfoRedirect("Requerimento realizado", "criarrequerimento.xhtml");
    }

    public RequerimentoServico getRequerimentoServico() {
        return requerimentoServico;
    }

    public void setRequerimentoServico(RequerimentoServico requerimentoServico) {
        this.requerimentoServico = requerimentoServico;
    }

    public Requerimento getRequerimento() {
        return requerimento;
    }

    public void setRequerimento(Requerimento requerimento) {
        this.requerimento = requerimento;
    }

    public boolean isDocPendentes() {
        return docPendentes;
    }

    public void setDocPendentes(boolean docPendentes) {
        this.docPendentes = docPendentes;
    }
}
